const fs = require('fs');
const log = console.log;

/*
1、执行指令，node FileCommand.js -list 在控制台输出sysFile文件夹下文件信息如下，以json数据形式表示，并按照文件大小从小到大进行排序。
[
    {"fileName": "file1.txt", "fileSize": "30"},
    {"fileName": "file1.js", "fileSize": "50"}
]
*/

const readdir = (dirname) => {
    try {
        const filename = fs.readdirSync(dirname);
        let arr = [];
        filename.forEach((item) => {

            let list = {
                filename: '',
                filesize: ''
            };

            const data = fs.statSync('./sysFile/' + item);

            if (data.isFile() == true) {
                list.filename = item;
                list.filesize = data.size;
                arr.push(list);
            }
        })
        log(JSON.stringify(arr));
    } catch (e) {
        console.error(e.message);
    }
}

/*
2、执行指令，node FileCommand.js -show 文件名

查找sysFile文件夹下的特定文件，在控制台中打印该文件的内容，
若文件不存在，提示该文件不存在。
*/
const findfile = (dirname, filename) => {
    try {
        const files = fs.readdirSync(dirname);

        files.forEach((item) => {
            if (item === filename) {
                const data = fs.readFileSync('./sysFile/' + filename);
                log(data.toString('utf8'));
                process.exit(1);
            }
        })
        log('该文件不存在');

    } catch (e) {
        console.error(e.message);
    }
}

/*
3、执行指令，node FileCommand.js -del 文件名
删除sysFile文件夹下的特定文件或文件夹（删除文件夹时，递归删除其中文件），
并在控制台打印:   
文件名（需为实际删除文件或文件夹名称）删除成功。
*/
const delfile = (dirname, filename) => {
    let src = dirname + filename;

    try {

        if (fs.statSync(src).isFile()) {
            fs.unlinkSync(src);
            log(`${filename} 删除成功`);
            process.exit(1);
        }

        if (fs.statSync(src).isDirectory()) {
            dirname = src + '/';
            let files = fs.readdirSync(src);

            for (let i = 0; i < files.length; i++) {
                let file = files[i];
                if (fs.statSync(dirname + file).isFile()) {
                    fs.unlinkSync(dirname + file);
                    log(`${file} 删除成功`);
                    continue;
                }

                if (fs.statSync(dirname + file).isDirectory()) {
                    delfile(dirname, file);
                }
            }
            fs.rmdirSync(dirname);
            log(`${logdir(dirname)} 删除成功`);
        }
    } catch (e) {
        console.error(e.message);
    }
}

const logdir = (str) => {
    let arr = str.split('/');
    if (arr[arr.length - 1] == "") {
        return arr[arr.length - 2];
    }
}

//命令行参数
if (process.argv.length === 3 && process.argv[2] === '-list') {
    readdir('./sysFile/');
} else if (process.argv.length === 4 && process.argv[2] === '-show') {
    findfile('./sysFile/', process.argv[3]);
} else if (process.argv.length === 4 && process.argv[2] === '-del') {
    delfile('./sysFile/', process.argv[3]);
}
